package part13;

/**
 * @author wcj
 * @Date 2021/5/24 15:14
 * @Version 1.0
 */
public class Part132 {

    /**
     * Java中针对字符串重载了+和+=两个操作符
     * 使用这两个操作符，编译器会自动的使用StringBuilder类创建对象，调用append()方法进行字符串拼接
     * 这样的话就可以省略过多的中间对象，做到性能优化
     */
    public static void addOperation() {
        String s = "mango";
        String res = "hhh" + s + "kkk" + "lll";
        System.out.println(res);
    }

    /**
     * 虽然编译器会自动进行优化，但是这种优化的性能只在操作次数较少的情况下有用
     * 因为如果在循环中通过+和+=来拼接字符串，那么会在循环中创建StringBuilder对象
     *
     * @param fields
     * @return
     */
    public static String implicit(String[] fields) {
        String res = "";
        for (int i = 0; i < fields.length; i++) {
            res += fields[i];
        }
        return res;
    }

    /**
     * 所以当字符串拼接操作较多的时候，我们最好自己创建StringBuilder对象进行循环拼接
     * 从而减少StringBuilder对象的创建
     * JDK5之前使用的是StringBuffer,其是线程安全的，因此开销也较大
     *
     * @param fields
     * @return
     */
    public static String explicit(String[] fields) {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < fields.length; i++) {
            stringBuilder.append(fields[i]);
        }
        return stringBuilder.toString();
    }

    public static void main(String[] args) {
        addOperation();
        String[] arr = {"wcj", "hhy", "lij", "ljp", "lkg", "kgi"};
        String implicit = implicit(arr);
        String explicit = explicit(arr);
    }
}
